/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package persistencia;

import corretorgramatical.Palavra;
import java.sql.*;
//import java.util.ArrayList;
//import java.util.Iterator;
import java.util.ArrayList;
import javax.swing.JOptionPane;

/**
 *
 * @author Marcello
 */
public class DatabaseCommunication {

    private Connection theConnection;
    private Statement theStatement;
    private String tabela;
    private String classeAtual;

    public String getClasseAtual(){
        return classeAtual;
    }
    
    public DatabaseCommunication() {
    }

    private void fecharConexao() {
        
        try {
            this.theConnection.close();
        } catch (SQLException sqlx) {
            System.err.println("Não foi possível fechar a conexão");
            sqlx.printStackTrace();
            System.exit(1);
        }
        
    }

    private void conectarDriver() {
        
        String url = "jdbc:postgresql://localhost:5432/corretor_gramatical";
        //String login = "postgres";
        //String senha = "senha";
        String login = "teste";
        String senha = "1234";
        //String url = "jdbc:mysql://localhost:3307/lamarcksribeiro?autoReconnect=true";

        try {
            Class.forName("org.postgresql.Driver");
            this.theConnection = DriverManager.getConnection(url, login, senha);
        } catch (ClassNotFoundException cnfx) {
            System.err.println("Não foi possível carregar o driver");
            cnfx.printStackTrace();
            //System.exit(1);
        } catch (SQLException sqlx) {
            //JOptionPane.showMessageDialog(null, "Não foi possivel se conectar ao banco de dados", "Erro", JOptionPane.ERROR_MESSAGE);
            System.err.println("Não foi possível se conectar com o banco de dados");
            sqlx.printStackTrace();
            //System.exit(1);
            
        }
    }

    public boolean existe(String palavra) {
        System.out.println("Procurando " + palavra);
        String select = "classificacao";
        String from = Character.toString(palavra.toLowerCase().charAt(0));
        String where = "palavra = \'" + palavra + "\'";
        //String texto = "SELECT " + select + " FROM " + from + " WHERE " + where;
        //System.out.println(texto);
        //TODO
        ArrayList arrayl = new ArrayList();
        this.conectarDriver();
        try {
            this.theStatement = this.theConnection.createStatement(
                    ResultSet.TYPE_SCROLL_INSENSITIVE,
                    ResultSet.CONCUR_UPDATABLE);

            ResultSet rset = this.theStatement.executeQuery("SELECT " + select + " FROM " + from + " WHERE " + where);
            System.out.println("Passei aqui.");
            if(rset.first()) {
                classeAtual = rset.getString(select);
                System.out.println(classeAtual);
                return true;
            } else {
                return false;
            }
        } catch (SQLException sqlx) {
            //JOptionPane.showMessageDialog(null, "ERRO!", "Erro", JOptionPane.ERROR_MESSAGE);
            System.out.println("Erro! ");
            sqlx.printStackTrace();
            this.fecharConexao();
            return false;
        }
    }

    //toda palavra encontrada na busca url deve ser adicionada ao banco
    public void adicionarPalavra(Palavra palavra) {
        
        //TODO

        this.conectarDriver();
        tabela = Character.toString(palavra.token.toLowerCase().charAt(0));

        try {

            this.theStatement = this.theConnection.createStatement();

            this.theStatement.executeUpdate("INSERT INTO " + tabela + "(palavra, classificacao)  VALUES ('"
                    + palavra.token + "', '" + palavra.tipo + "');");
            this.theStatement.close();
            //JOptionPane.showMessageDialog(null, "Dado Inserido corretamente!");
            //System.out.println("Dado inserido corretamente");
        } catch (SQLException sqlx) {
            //JOptionPane.showMessageDialog(null, "Não foi possível inserir os dados", "Erro", JOptionPane.ERROR_MESSAGE);
            System.err.println("Não foi possível inserir os dados, veja o erro logo abaixo:");
            sqlx.printStackTrace();
        }

        this.fecharConexao();

    }
}
